from PySide6.QtGui import Qt, QFont, QTextOption
from PySide6.QtWidgets import QGraphicsTextItem


class 可编辑文本项(QGraphicsTextItem):
    def __init__(self, 文本, 修改回调=None, 多行=False, 父项=None):
        super().__init__(文本, 父项)
        self.父项=父项
        self.修改回调 = 修改回调
        self.多行 = 多行
        self.最大宽度 = 300  # 默认设置一个最大宽度
        self.字体最小值 = 8   # 设置字体的最小值
        self.字体最大值 = 30  # 设置字体的最大值
        #检查触发函数是否是可调用对象
        if  callable(self.修改回调):
            #print("触发函数是可调用对象")
            self.setTextInteractionFlags(Qt.TextEditorInteraction)  # 设置为可编辑
        # else:
        #     print("触发函数不是可调用对象")
        #     print(f"触发函数类型: {type(self.修改回调)}")

        # 设置初始字体
        self.当前字体大小 = 13
        self.设置字体大小(self.当前字体大小)

    def 设置字体大小(self, 字号):
        """
        设置字体大小
        """
        font = QFont("Arial", 字号)
        self.setFont(font)

    def 自动调整大小(self, 新宽度):
        """
        根据父容器的宽度自动调整文本框大小
        """
        self.setTextWidth(新宽度)  # 根据新的宽度设置文本框宽度
        bounding_rect = self.boundingRect()  # 获取当前的边界矩形
        self.prepareGeometryChange()
        self.update()  # 刷新文本项

        # 根据文本框大小调整字体
        self.自动调整字体大小(新宽度, bounding_rect.height())

    def 自动调整字体大小(self, 宽度, 高度):
        """
        根据文本框的宽度和高度自适应调整字体大小
        """
        适应的字体大小 = self.当前字体大小

        # 尝试减少字体大小以适应文本框宽度
        while self.boundingRect().width() > 宽度 and 适应的字体大小 > self.字体最小值:
            适应的字体大小 -= 1
            self.设置字体大小(适应的字体大小)

        # 尝试增加字体大小以填充文本框宽度
        while self.boundingRect().width() < 宽度 and 适应的字体大小 < self.字体最大值:
            适应的字体大小 += 1
            self.设置字体大小(适应的字体大小)

    def focusOutEvent(self, 事件):
        super().focusOutEvent(事件)
        编辑后的文本 = self.toPlainText()  # 获取编辑后的文本
        #self.当文本编辑完成(编辑后的文本)  # 触发自定义函数
        if  callable(self.修改回调):
            if not  self.修改回调(编辑后的文本):  # 如果修改回调函数返回True，则更新父项
                self.父项._设置文本()

        #self.自动调整大小(self.最大宽度)  # 调整文本大小

    # def keyPressEvent(self, event):
    #     if not self.多行 and (event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter):
    #         self.clearFocus()  # 取消焦点
    #     else:
    #         super().keyPressEvent(event)
    #         if self.多行:
    #             self.自动调整大小(self.最大宽度)  # 文本内容变化时调整文本框大小

    def 设置文本对齐方式(self, 对齐方式):
        """设置文本对齐方式"""
        try:
            self.document().setDefaultTextOption(QTextOption(对齐方式.value))
            self.adjustSize()
        except Exception as e:
            print(f"设置文本对齐方式时发生错误: {e}")
